package dancereal;

public class J22_PrivateConstructor {

	/* Private 으로 선언된 생성자
	 * 일반적으로 모든 생성자는 public 이어야 함
	 * 클래스에 대한 객체를 생성하려면
	 * 반드시 필요한 것이 생성자이기 때문임
	 * 
	 * 하지만, 어떤 생성자는 private 으로 만들어서
	 * 그들의 클래스가 객체화되지
	 * 못하게 하는 경우도 있음
	 * private 생성자를 사용한 클래스를
	 * singleton 클래스라 부름
	 * 
	 * 생성자는 private 으로 선언
	 * 객체 변수는 private static 으로 선언해서
	 * 클래스의 객체를 메서드를 통해 접근 가능
	 */

	public static void main(String[] args){
		
	
	/*Singleton one = new Singleton();
		Singleton two = new Singleton();
		Singleton three = new Singleton();*/
		Singleton one = Singleton.newInstance();
		Singleton two = Singleton.newInstance();
		Singleton three = Singleton.newInstance();
	
	
	
	
	
	}
} // J22

class Singleton{
	
	private static Singleton object = null;
	/* object 는 static 으로 선언되었기 때문에
	 * 단 하나의 객체만 생성 가능
	 * 
	 */
	/*public Singleton() {
      System.out.println("객체가 하나 만들어졌으욬");
	}*/



	private Singleton() {
      System.out.println("객체가 하나 만들어졌으욬");
	}
/*     public static Singleton newInstance(){
  		Singleton object = new Singleton();
  		return object;}
*/    // 생성자는 일반 메서드를 통해서만 호출


public static Singleton newInstance(){
	if (object == null) object = new Singleton();
	// 객체가 만들어지지 않았다면 (object == null)
	// 객체를 하나 생성함(new Singleton)
	return object;
}
}